package great.project.jpa.sign.table.domain.entity;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.Hibernate;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
import java.util.Objects;

/**
    * 菜单权限表
 * @author v_zhangshun01
 */
@Getter
@Setter
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@Table
@Entity
public class SysPermission {

    /**
    * 主键id
    */
    @Id
    private String id;

    /**
    * 父id
    */
    private String parentId;

    /**
    * 菜单标题
    */
    private String name;

    /**
    * 路径
    */
    private String url;

    /**
    * 组件
    */
    private String component;

    /**
    * 组件名字
    */
    private String componentName;

    /**
    * 一级菜单跳转地址
    */
    private String redirect;

    /**
    * 菜单类型(0:一级菜单; 1:子菜单:2:按钮权限)
    */
    private Integer menuType;

    /**
    * 菜单权限编码
    */
    private String perms;

    /**
    * 权限策略1显示2禁用
    */
    private String permsType;

    /**
    * 菜单排序
    */
    private Double sortNo;

    /**
    * 聚合子路由: 1是0否
    */
    private Boolean alwaysShow;

    /**
    * 菜单图标
    */
    private String icon;

    /**
    * 是否路由菜单: 0:不是  1:是（默认值1）
    */
    private Boolean isRoute;

    /**
    * 是否叶子节点:    1:是   0:不是
    */
    private Boolean isLeaf;

    /**
    * 是否缓存该页面:    1:是   0:不是
    */
    private Boolean keepAlive;

    /**
    * 是否隐藏路由: 0否,1是
    */
    private Integer hidden;

    /**
    * 描述
    */
    private String description;

    /**
    * 创建人
    */
    private String createBy;

    /**
    * 创建时间
    */
    private Date createTime;

    /**
    * 更新人
    */
    private String updateBy;

    /**
    * 更新时间
    */
    private Date updateTime;

    /**
    * 删除状态 0正常 1已删除
    */
    private Integer delFlag;

    /**
    * 是否添加数据权限1是0否
    */
    private Integer ruleFlag;

    /**
    * 按钮权限状态(0无效1有效)
    */
    private String status;

    /**
    * 外链菜单打开方式 0/内部打开 1/外部打开
    */
    private Boolean internalOrExternal;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
        SysPermission that = (SysPermission) o;

        return Objects.equals(id, that.id);
    }


}
